#include "Kopiec.hh"
#include <string.h>
#include <sys/time.h>

void Kopiec:: exch (int &a, int &b)	//zamiana a z b exchange wymiana
{
	int tmp = a;
	a = b;
	b = tmp;
}

void Kopiec:: upheap (int t[], int k)
{
	while (k>1 && t[k/2] < t[k])
	{
		exch (t[k], t[k/2]);
		k = k/2;
	}
}

void Kopiec:: downheap (int t[], int k, int n)
{
	int j = 2*k ;
	while (j <= n)
	{
		if (j < n && t[j] < t[j+1]) j++;
		if (t[k] >= t[j]) break;
		exch (t[k], t[j]);
		k = j; j = 2*k;
	}
}


void Kopiec:: insert()
{
	for(int i=0;i<rozmiar;i++)
	{
		n++;
		upheap (t, n) ;
	}
}

int Kopiec:: max()
{
	return t[1] ;
}

void Kopiec:: deletemax()
{
	if(n>0){
		int tmp=t[1];
		t[1] = t[n];
		t[n]=tmp;
		n--;
		downheap(t, 1, n);
	} else {
		cerr << "\n[ KOPIEC JEST JUZ PUSTY !!!]\n";
	}
}

void Kopiec:: settable(int tab[],int size){
	if(t!=NULL){
		delete t;
	}
	t=new int[size+1];
	for(int i=1;i<=size;i++){
		t[i]=tab[i-1];
	}
	n=0;
	rozmiar=size;
}

void Kopiec:: sort(int* tab, int size){
	while(n>0){
		int m=max();
		deletemax();
		tab[n]=m;
	}
	tab=t;
}






